# 导入 numpy 库，用于处理数组和矩阵等数值计算
import numpy as np
# 导入 pandas 库，用于数据处理和分析
import pandas as pd

ones = np.ones([4,8])#生成一个4行8列的数组，数据全是1
np.zeros_like(ones)#将ones中所有的数据全部改为0
a=np.array(ones)#深拷贝
b=np.asarray(ones)#浅拷贝



# 创建一个 ExcelFile 对象，用于读取指定路径的 Excel 文件 '成绩.xlsx'
excel_file = pd.ExcelFile('成绩.xlsx')
# 解析 Excel 文件的第一个工作表，只读取指定列，将 '准考证号' 列作为索引列，将 '-' 视为缺失值
# usecols 参数指定要读取的列，index_col 参数指定索引列，na_values 参数指定将哪些值视为缺失值
df = excel_file.parse(0, usecols=['准考证号', '班级','语文', '数学', '英语', '物理', '化学', '政治', '历史'], index_col='准考证号', na_values=['-',0])

# 找出数据框中存在缺失值的行
# df.isnull().any(axis=1) 用于检查每一行是否存在缺失值，返回一个布尔型的 Series
# df[df.isnull().any(axis=1)] 根据布尔型 Series 筛选出存在缺失值的行
incomplete_grades = df[df.isnull().any(axis=1)]

# 从数据框中删除存在缺失值的行，得到成绩完整的行
# dropna() 方法用于删除包含缺失值的行
complete_grades = df.dropna()

# 按指定顺序重新排列列（确保 numpy 数组顺序正确）
column_order = ['班级','语文', '数学', '英语', '物理', '化学', '政治', '历史']
complete_grades = complete_grades.reindex(columns=column_order)

# 创建一个 ExcelWriter 对象，用于将数据写入 Excel 文件 '成绩_清洗后.xlsx'
# engine='openpyxl' 指定使用 openpyxl 引擎来处理 Excel 文件
with pd.ExcelWriter('成绩_清洗后.xlsx', engine='openpyxl') as writer:
    # 将成绩完整的数据写入 Excel 文件的第一个工作表，工作表名为 '清洗后数据'
    complete_grades.to_excel(writer, sheet_name='清洗后数据')
    # 将成绩不全的数据写入 Excel 文件的第二个工作表，工作表名为 '删除数据'
    incomplete_grades.to_excel(writer, sheet_name='删除数据')

# 将清洗后的数据框转换为 numpy 数组
# to_numpy() 方法将数据框转换为 numpy 数组
# 提取班级列（第一列）
classes = complete_grades['班级'].values
# 提取成绩数据（第二列到最后一列）
scores = complete_grades.iloc[:, 1:].to_numpy()

# 打印转换后的 numpy 数组
print(classes,scores)
print(scores[:,0:2])#只取前两列成绩

#逻辑运算
#print(scores>60)
scores_copy=np.asanyarray(scores)
scores_copy[scores_copy>60] = 1#超过60的成绩标志为1
#print(scores_copy)
print(np.all(scores_copy[0:2,:]>30))#前两名同学的成绩都超过30返回true，否则返回false
print(np.any(scores_copy[0:2,:]>30))#前两名同学的成绩有超过30的返回true，否则返回false

#数组间运算
